package smallfrench.moteur.noeuds;

import smallfrench.moteur.interp.Portee;
import smallfrench.moteur.interp.RObjet;
import smallfrench.moteur.lexer.lexemes.Lexeme;

/**
 * Représente un noeud de l'arbre syntaxique, une expression.
 * @author antoine1023
 */
public abstract class Noeud {

	/**
	 * Le lexème correspondant au noeud.
	 */
	public final Lexeme lexeme;

	public Noeud(Lexeme t) {
		if (t == null)
			throw new NullPointerException();
		lexeme = t;
	}

	/**
	 * Evalue le noeud.
	 * 
	 * @param portee
	 * @return La valeur résultant de l'évaluation
	 * @throws RuntimeException Si une exception à été levée
	 */
	public abstract RObjet evaluer(Portee portee);

	@Override
	public abstract String toString();

}
